package presentacion;

import java.awt.CardLayout;
import java.util.ArrayList;
import java.util.Iterator;

import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;

import logica.Aplicacion;
import logica.Area;
import dominio.Controlador;

@SuppressWarnings("serial")
public class ConsultaAreasJDialog extends JDialog {

	private JTable table;

	public ConsultaAreasJDialog(JFrame papi) {
		super(papi);
		setTitle("Areas");
		setBounds(100, 100, 400, 260);
		getContentPane().setLayout(new CardLayout(0, 0));

		table = new JTable();

		JScrollPane scrollPane = new JScrollPane(table);
		getContentPane().add(scrollPane, "name_7976597473678");
		this.setLocationRelativeTo(null);
	}

	// Se invoca desde fuera
	public void cargaAreas(Controlador c) {
		try {

			ArrayList<Area> listaAreas = (ArrayList<Area>) c.encontrarAreas();
			Iterator<Area> it = listaAreas.iterator();

			Area a;

			AreaTableModel model = new AreaTableModel();
			table.setModel(model);
			model.clear();

			while (it.hasNext()) {
				a = it.next();
				model.addRow(a);
			}

		} catch (Exception e) {
			if (Aplicacion.DEBUG) {
				e.printStackTrace();
			}
			JOptionPane.showMessageDialog(this, e.getMessage(), "ERROR", JOptionPane.ERROR_MESSAGE);
		}
	}

	// ****************************************************************************
	// Clase interna para del Modelo de la tabla
	// ****************************************************************************
	class AreaTableModel extends AbstractTableModel {
		private static final long serialVersionUID = 1L;
		// Columnas de la tabla
		private final String[] columnNames = { "Nombre", "Editor" };

		// Datos que muestra la tabla
		private final ArrayList<Area> data = new ArrayList<Area>();

		@Override
		public int getColumnCount() {
			return columnNames.length;
		}

		@Override
		public int getRowCount() {
			return data.size();
		}

		@Override
		public String getColumnName(int col) {
			return columnNames[col];
		}

		// Este m�todo se dispara cada vez que la tablanecesita el valor de un
		// campo
		@Override
		public Object getValueAt(int row, int col) {
			Area a = data.get(row);
			switch (col) {
			case 0:
				return a.getNombre();
			case 1:
				return a.getEditorArea().getNombreUsuario();
			default:
				return null;
			}
		}

		public void clear() {
			data.clear();
		}

		@Override
		public Class<? extends Object> getColumnClass(int c) {
			return getValueAt(0, c).getClass();
		}

		public void addRow(Area row) {
			data.add(row);
			this.fireTableDataChanged();
		}

		public void delRow(int row) {
			data.remove(row);
			this.fireTableDataChanged();
		}
	}

}
